package event_handlers

import (
	"fmt"
	"go-ddd-ecommerce/internal/domain/events"
)

// EmailNotificationHandler 邮件通知处理器
type EmailNotificationHandler struct{}

func NewEmailNotificationHandler() *EmailNotificationHandler {
	return &EmailNotificationHandler{}
}

func (h *EmailNotificationHandler) Handle(event events.DomainEvent) error {
	switch e := event.(type) {
	case *events.OrderCreatedEvent:
		// 模拟发送邮件通知
		fmt.Printf("📧 发送邮件通知: 用户 %s 成功创建订单 %s, 金额: %.2f\n",
			e.UserID, e.OrderID, e.TotalAmount)
		// 实际项目中这里会调用邮件服务
		return nil
	case *events.UserBalanceUpdateEvent:
		if e.Amount < 0 {
			fmt.Printf("📧 发送余额变动邮件: 用户 %s 扣款 %.2f, 当前余额: %.2f\n",
				e.UserID, -e.Amount, e.NewBalance)
		} else if e.Amount > 0 {
			fmt.Printf("📧 发送余额变动邮件: 用户 %s 充值 %.2f, 当前余额: %.2f\n",
				e.UserID, e.Amount, e.NewBalance)
		}
	case *events.ProductCreatedEvent:
		// 模拟发送邮件通知
		fmt.Printf("📧 新增商品 : %s ,价格 : %f ,库存 : %d\n",
			e.Name, e.Price, e.Stock)
		// 实际项目中这里会调用邮件服务
		return nil
	default:
		return nil
	}
	return nil
}
